package gui;

import application.CouleurTank;
import application.Mouvement;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import javax.swing.JComponent;

/**
 *
 * @author Alexis
 */
public class Canon extends JComponent {

    private Monde monde;
    private Tank tank;
    private Mouvement Mouvement = new Mouvement();
    private Image tankCanon;
    private CouleurTank couleurTank;
    private double angleActuelCanon;
    private int canonX, canonY, boutDuCanonX, boutDuCanonY;
    private final int longueurCanon = 77;

    public Canon(int posX, int posY, CouleurTank couleur, Tank tanky, Monde mundo) {
        setSize(162, 162);

        couleurTank = couleur;
        monde = mundo;
        tank = tanky;

        setLocation(tank.getX(), tank.getY());

        canonY = 81;
        canonX = 81;
        angleActuelCanon = 180.0;
        
        do {
            if(couleurTank == CouleurTank.VERT) {
                tankCanon = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("images/Tank_Canon_Vert.png"));
            } else if(couleurTank == CouleurTank.BLEU) {
                tankCanon = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("images/Tank_Canon_Bleu.png"));
            } else if(couleurTank == CouleurTank.JAUNE) {
                tankCanon = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("images/Tank_Canon_Jaune.png"));
            } else if(couleurTank == CouleurTank.ROUGE) {
                tankCanon = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("images/Tank_Canon_Rouge.png"));
            }
        } while (tankCanon.getHeight(monde) == -1 || tankCanon.getWidth(monde) == -1);
    }

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2dTankCanon = (Graphics2D) g;

        g2dTankCanon.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        if(tank.vivant){
        g2dTankCanon.rotate(Math.toRadians(angleActuelCanon + 90), canonX, canonY);
        g2dTankCanon.drawImage(tankCanon, canonX - 81, canonY - 81, this);
        }
    }

    void progressionDeMouvement(double angleViseCanon, double xSouris, double ySouris, double radDeRotation) {
        setLocation(tank.getX(), tank.getY());

        angleViseCanon = Mouvement.calculerAngle(xSouris, ySouris);

        if (Math.abs(Math.abs(angleViseCanon) - Math.abs(angleActuelCanon)) > 2) {
            angleActuelCanon = Mouvement.angleDeRotation(angleViseCanon, angleActuelCanon, radDeRotation);
        }

        boutDuCanonX = (int) (canonX + Math.cos(Math.toRadians(angleActuelCanon)) * longueurCanon);
        boutDuCanonY = (int) (canonY + Math.sin(Math.toRadians(angleActuelCanon)) * longueurCanon);
        repaint();
    }

    public double getAngleActuelCanon() {
        return angleActuelCanon;
    }

    public int getCanonX() {
        return canonX;
    }

    public int getCanonY() {
        return canonY;
    }

    public int getBoutDuCanonX() {
        return boutDuCanonX;
    }

    public int getBoutDuCanonY() {
        return boutDuCanonY;
    }
}